package com.demo.objectProvider.component;

import com.demo.objectProvider.pojo.Dog;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

@Component
public class ObjectProviderComponent {

    //注入 ObjectProvider 对象
    @Autowired
    private ObjectProvider<Dog> dogObjectProvider;

    /**
     * 获取此类型可用 bean，没有或者多个都抛异常
     * */
    public void getObject(){
        //获取实例对象, 没有就报错
        Dog object = dogObjectProvider.getObject();
        System.out.println(object);
    }

    /**
     * 获取此类型可用 bean，没有返回 null，多个抛异常
     * */
    public void getIfAvailable(){
        //获取实例对象，不存在返回 null
        Dog ifAvailable = dogObjectProvider.getIfAvailable();
        System.out.println(ifAvailable);

        //获取实例对象，不存就创建一个
        Dog ifAvailable1 = dogObjectProvider.getIfAvailable(() -> new Dog("wpz", "pink", 30));
        System.out.println(ifAvailable1);
    }

    /**
     * 如果此类型 bean 有一个或者多个，就返回 null
     * */
    public void getUnique(){
        //获取唯一对象
        Dog ifUnique = dogObjectProvider.getIfUnique();
        System.out.println(ifUnique);

        //获取唯一对象，没有就创建一个
        Dog ifUnique1 = dogObjectProvider.getIfUnique(() -> new Dog("wpz", "pink", 29));
        System.out.println(ifUnique1);
    }

    /**
     * 以流的方式获取此类型 bean
     * */
    public void stream(){
        List<Dog> collect = dogObjectProvider.stream().collect(Collectors.toList());
        System.out.println(collect);
    }
}
